const express = require('express');
//引入模型对象
const Users = require('../models/users');
const router = new express.Router();

//定义用户名密码规则
const user_name_reg = /^[A-Za-z][A-Za-z0-9_]{2,19}$/
const password_reg = /^[A-Za-z0-9_]{4,15}$/

//注册
router.post('/register',async(req,res)=>{
    console.log(req.body);
    const {user_name,password} = req.body;
    if(user_name_reg.test(user_name) && password_reg.test(password)){
        //存放数据库
        try{
            await Users.create(req.body);
            res.send('注册成功！');
        }catch(e){
            console.log(e);
            res.send('网络延迟，请重新注册！');
        }
    }else{
        res.send('用户名和密码不符合规则，请重新注册！');
    }
})

//登录
router.post('/login',async(req,res)=>{
    const {user_name,password} = req.body;
    if(user_name_reg.test(user_name) && password_reg.test(password)){
        try{
            const user = await Users.findOne({user_name});
            if(user){
                if(user.password == password){
                    res.send('登录成功！')
                }else{
                    res.send('密码错误！')
                }
            }else{
                res.send('该用户不存在，请注册！');
            }
        }catch(e){
            console.log(e);
            res.send('网络延迟！')
        }
    }
})

// 修改密码 方案一 通过post发送
router.post('/editPost',async(req,res)=>{
    console.log(req.body);
    try{
         // Users这个模型对象中更新 updateOne
        // 修改密码 ：一个用户名 第二个是新密码
        const result =await Users.updateOne({user_name:req.body.user_name},{$set:{password:req.body.password}});
        console.log(result);
        res.send('修改密码成功')
    }catch(e){
        console.log(e);
        res.send('网络延迟');
    }
})

// 修改密码不建议使用get 不安全
// 修改密码的方法二
router.get('/editQuery',async(req,res)=>{
    // 通过get请求的query参数获取用户名和新密码
    // ?key=value&key=value
    console.log(req.query);

    try{
        // Users这个模型对象中更新 updateOne
       // 修改密码 ：一个用户名 第二个是新密码
        const result =await Users.updateOne({user_name:req.query.user_name},{$set:{password:req.query.password}});
        console.log(result);
        res.send('修改密码成功')
    }catch(e){
        console.log(e);
        res.send('网络延迟');
    }
})
// get请求的params
router.get('/editParams/:user_name/:password',async(req,res)=>{
    console.log(req.params);
    try{
        // Users这个模型对象中更新 updateOne
       // 修改密码 ：一个用户名 第二个是新密码
        const result =await Users.updateOne({user_name:req.params.user_name},{$set:{password:req.params.password}});
        console.log(result);
        res.send('修改密码成功')
    }catch(e){
        console.log(e);
        res.send('网络延迟');
    }
})
// 删除密码
router.get('/del',async(req,res)=>{
    console.log(req.query);
    try{
        const result =await Users.deleteOne({user_name:req.query.user_name});
        console.log(result);
        res.send('删除成功！！');
    }catch(e){
        console.log(e);
        res.send('网络延迟')
    }
})
module.exports = router;